Dann machen wir das gleich ordentlich!

Versionskontrolle mit Git in der Lehre für Social Sciences

R. Dutschke, C. Scheffel, M. Schoemann, G. Thiele

Kennenlernen

Check-in

  • Wer bist Du?
  • Was erwartest Du?
  • Hast Du die Vorarbeiten gemacht?
    • install: git, Gittyup
    • make: GitHub-Account

Motivation

Ausgangspunkt

Lehre in den Social Sciences

Projekte datenlastig Experimental-/Surveydaten, Skripte/Modelle, Text
Projekte kooperationslastig paralleles Arbeiten, gegenseitiges Überprüfen
Wichtigkeit von Open Science und FDM Reproduzierbarkeit, Open Data/…, FAIR-Prinzipien
Studys technikavers keine/wenig Medienkompetenz, keine Datenkompetenz

Herausforderung

Das muss irgendwie Einklang gebracht werden

Versionkontrolle mit git

Git

  • Lokales Versionskontrollsystem (“git Repositorium”)
  • Verfolgt Änderungen an Dateien innerhalb eines Ordners/Projekts
  • Zentrales Element ist der Commit

Remotes

  • Repositorien können miteinander verknüpft werden
  • typischer Fall: lokales Repositorium wird mit einem “Remote” hintersichert
  • verknüpfte Repositorien können abgeglichen werden

GitHub & GitLab

  • Plattform zur Speicherung von Git-Repositories
  • Online-Zusammenarbeit (Issues, Pull Requests, Wiki, Projects)
  • Backup & Veröffentlichung von Code und Daten

Wichtig:
Jedes Repositorium ist alleinstehend. Der Abgleich mit dem Remote (oder anderen Repositorien) erfolgt immer nur manuell mit push oder pull.

Wichtige git Befehle (Teil 1)

  • clone: ein Remote-Repositorium kopieren und als lokales Repositorium einrichten
  • stage: Änderungen in Dateien für einen Commit vorbereiten (synonym: add)
  • commit: Änderungen im Repositorium festhalten
  • status: zeigt alle Dateien mit Änderungen seit dem letzten Commit
  • checkout: den aktuellen Branch wechseln oder den Zustand des Repositoriums oder einer Datei auf einen früheren Commit zurücksetzen

Wichtige git Befehle (Teil 2)

  • push: den Stand des lokalen Repositoriums zum verknüpften Remote-Repositorium übertragen
  • pull: den Stand des Remote-Repositoriums zum lokalen Repositorium übertragen

Graphical User Interfaces unterstützen beim Arbeiten mit git. Unser Vorschlag: gittyup

Praktische Arbeit

Grundlagen ausprobieren

  • Klonen Sie das Git-Repositorium für diesen Workshop in einen lokalen Ordner Ihrer Wahl https://github.com/mschoemann/VersionControlInTeaching.git.
    Wechseln Sie über gittyup in den Branch workshop.
  • Erstellen Sie eine Textdatei 1 mit beliebigem Namen im Unterordner ./WS_Folder/
  • Schreiben Sie etwas in die Textdatei und erstellen Sie einen Commit mit einer aussagekräftigen Commit-Nachricht 2
  • Nehmen Sie Änderungen in der Datei vor und/oder erstellen Sie zusätzliche Dateien.
    Überprüfen Sie in gittyup, wie diese Änderungen erfasst werden. Erstellen Sie einen neuen Commit, der wahlweise auch nur Teile der Änderungen beinhalten kann.
  • Holen Sie eine alte version einer Ihrer Dateien ins aktuelle Arbeitsverzeichnis
20:00

Branching

Main: Der Hauptzweig eines Repositoriums

  • teilw. auch master genannt
  • hier liegt die stabile Version des Codes oder der Dateien

Nebenzweige

  • Zweig, der von einem bestimmten Punkt von main (oder einem anderen Branch) abgeht
  • Änderungen sind exklusiv innerhalb des Zweigs
  • wird genutzt, um neue Funktionen oder Teile eines Projekts zu erarbeiten, ohne main zu beeinflussen
  • für verschiedene Branches können auf manchen Plattformen Regeln eingeführt werden (z.B. protection rules in GitHub)

Abzweigen & Zusammenführen

  • (Neuer) Branch: Einen neuen Branch erstellen
  • Checkout: Wechsel zu
    • einem anderen Branch
    • einem anderen Commit
    • einer Datei in einem bestimmten Commit

Abzweigen & Zusammenführen

  • (Neuer) Branch: Einen neuen Branch erstellen
  • Checkout: Wechsel zu
    • einem anderen Branch
    • einem anderen Commit
    • einer Datei in einem bestimmten Commit
  • Merge: Branches zusammenführen
    • Alle Änderungen beider Branches werden zusammengeführt (d.h. der aktuellste Stand der beiden Branches)
    • Merging ist nicht destruktiv: beide Branches existieren weiterhin

Abzweigen & Zusammenführen

  • Rebase: die Commits eines Branchs werden nach dem letzten Commit eines anderen Zweigs angewandt
    • Rebasing ist destruktiv: der angefügte Branch existiert danach nicht mehr

Abzweigen & Zusammenführen

  • Rebase: die Commits eines Branchs werden nach dem letzten Commit eines anderen Zweigs angewandt
    • Rebasing ist destruktiv: der angefügte Branch existiert danach nicht mehr

Abzweigen & Zusammenführen

  • Rebase: die Commits eines Branchs werden nach dem letzten Commit eines anderen Zweigs angewandt
    • Rebasing ist destruktiv: der angefügte Branch existiert danach nicht mehr
    • Faustregel: Public Branches nicht (unmittelbar) rebasen!
  • Squash: Mehrere Commits werden in einen Commit komprimiert und dann auf einen anderen Branch rebased

Mehr über Branches, Merging vs. Rebasing und Squashing

Merge-Konflikte

  • die Inhalte einer oder mehrerer Datei(en) unterscheiden sich zwischen zwei Branches, die gemerged werden sollen

Merge-Konflikte

Merge-Konflikte

Merge-Konflikte

Merge-Konflikte

  • die Inhalte einer oder mehrerer Datei(en) unterscheiden sich zwischen zwei Branches, die gemerged werden sollen
    • Beide Versionen können übernommen werden (messy)
    • Konflikte können (zeilenweise) mit einem Difftool (Mergetool) gelöst werden
  • Difftool: Befehl in der Kommandozeile & Programm zum Anzeigen und bearbeiten von Unterschieden in Dateien
  • Konflikte können auch bei Pulls auftreten und ebenfalls mit einem Difftool gelöst werden

Weiterlesen:

Cherrypicking

  • gezieltes Auswählen einzelner Commits aus einem Branch, um sie im gleichen oder
  • Kopie des Commits wird in den anderen Branch gemerged (non-destruktiv)
  • Wichtig: Commits müssen gut strukturiert sein

Forking

  • Fork: Kopieren eines fremden Repositoriums
    • Erstellt eine eigene unabhängige Version
    • Änderungen können per Pull Request an das Original-Repositorium zurückgegeben werden
  • Nutzung:
    • Zu anderen Projekten beitragen, in denen man keine Schreibrechte hat
    • Ausgehend vom Original eine eigene Version des Projekts erstellen
  • Mehr zu Forks auf GitHub und Atlassian

Praktische Arbeit

Fortgeschrittenes ausprobieren

  • Erstellen Sie einen neuen Branch in ihrem Repositorium
  • Ändern oder erstellen Sie eine Datei im Branch und committen sie die Veränderung im Branch
  • Versuchen sie dann den Branch mit dem Workshop-Branch (oder einem anderen) zu mergen
  • Provozieren sie einen Merge-Konflikt in zwei Branches (z.B. verschiedene Versionen der gleichen Zeile einer Datei) und lösen Sie den Konflikt in GittyUp
  • Bonus: Erstellen Sie sich einen weiteren zusätzlichen Branch und probieren Sie mit den beiden von Ihnen erstellten Branches Rebasing, Squashing und Cherrypicking aus
10:00

Weitere Materialien

Wrap-up

Probleme und passende Lösungen

Versionschaos Zentrale Versionskontrolle sorgt für eine gemeinsame Basis
Unklare Verantwortlichkeiten Commit-Historie zeigt genau, wer was wann geändert hat
Zusammenarbeit in Gruppenarbeiten Branches ermöglichen paralleles Arbeiten ohne Überschreiben, Fork ermöglicht eigenständiges Arbeiten in eigenen Versionen
Datenverlust GitHub oder GitLab dient als zuverlässiges Online-Backup
Fehlende Nachvollziehbarkeit Vollständige Historie macht Arbeitsprozesse transparent
Schwierige Betreuung Pull Requests erleichtern Übergabe von Daten und Dateien, Feedback, Review & Fortschrittskontrolle

Herausforderungen

  • Neue Begriffe und Abläufe
  • Anfangs ungewohnt (für einen selber und für Kolleg:innen)
  • Unterschiedliches Verhalten von Git-Tools auf verschiedenen Betriebssystemen
  • Mit guter Software (GittyUp) wird der Einstieg deutlich leichter

Fazit

Git bringt Ordnung, Transparenz und kollaborative Effizienz – ideal für Lehre, Projekte und Abschlussarbeiten.

Praxis

Repositorium für eigenes Projekt erstellen

  • Überlegen Sie sich, für welche Lehrveranstaltung / welches Projekt sich Versionskontrolle mit Git eignen könnte
  • Erstellen Sie sich für dieses Projekt ein neues Repositorium in GitHub
  • Erstellen Sie eine aussagekräftige README Datei
  • Klonen Sie das Repositorium in einen lokalen Ordner Ihrer Wahl
  • Fügen Sie in das Repositorium Lehrmaterialien, etc. ein. Probieren Sie dabei grundlegende Funktionen von Git aus, die Sie heute kennen gelernt haben (z.B. Commit, Push, Pull, etc.)
  • Überlegen Sie sich, welche weiteren Funktionen von Git (z.B. Branching, Forking) für Ihren Anwendungsfall sinnvoll sind, welche vielleicht aber eher hinderlich sind.
20:00

Vorhandene Projekte entdecken

  • Sollte Ihnen spontan kein geeignetes Projekt einfallen, zeigen wir Ihnen gern eigene Lehrveranstaltungen / Projekte, die wir mittels Git organisiert und umgesetzt haben.
  • Wir berichten gern aus unserer Praxis:
    • Warum war die Umsetzung mittels Git für uns sinnvoll?
    • Welche Funktionen von Git haben wir in dem Projekt besonders geschätzt?
20:00

Vielen Dank!

Quellen